// import 'package:heartrate_monitoring/models/test_record.dart';
// import 'package:sqflite/sqflite.dart';
// import 'package:path/path.dart';
// import 'package:path_provider/path_provider.dart';

// class DatabaseService {
//   static const _databaseVersion = 2; // 版本升级
//   static const _databaseName = 'heart_rate.db';

//   // 会话表结构（移除status字段）
//   static const _sessionTable = 'sessions';
//   static const _sessionColumns = [
//     'id INTEGER PRIMARY KEY AUTOINCREMENT',
//     'name TEXT NOT NULL',
//     'wearingMode TEXT NOT NULL',
//     'gender TEXT NOT NULL',
//     'activityType TEXT NOT NULL',
//     'startTime INTEGER NOT NULL',
//     'endTime INTEGER',
//     'duration INTEGER',
//     'avg_heartRate INTEGER',
//     'max_heartRate INTEGER',
//     'min_heartRate INTEGER',
//     'deviceName TEXT NOT NULL',
//     'deviceMac TEXT NOT NULL',
//     'deviceBattery TEXT NOT NULL',
//     'heartRates_Count INTEGER NOT NULL',
//   ];

//   // 心率数据表结构
//   static const _heartRateTable = 'heart_rates';
//   static const _heartRateColumns = [
//     'id INTEGER PRIMARY KEY AUTOINCREMENT',
//     'session_id INTEGER NOT NULL',
//     'timestamp INTEGER NOT NULL',
//     'value INTEGER NOT NULL',
//     'FOREIGN KEY(session_id) REFERENCES sessions(id) ON DELETE CASCADE'
//   ];

//   Database? _database;

//   // 兼容性方法（保持原有接口）
//   Future<int> getTotalSessionCount() async {
//     return getFilteredSessionCount(
//       startDate: null,
//       endDate: null,
//       genders: null,
//       activities: null,
//     );
//   }

//   // 兼容性方法（保持原有接口）
//   Future<int> getAbnormalSessionCount() async {
//     return getFilteredAbnormalCount(
//       startDate: null,
//       endDate: null,
//       genders: null,
//       activities: null,
//     );
//   }

//   Future<Database> get database async {
//     if (_database != null) return _database!;
//     _database = await _initDatabase();
//     return _database!;
//   }

//   Future<Database> _initDatabase() async {
//     final dir = await getApplicationDocumentsDirectory();
//     final path = join(dir.path, _databaseName);
    
//     return openDatabase(
//       path,
//       version: _databaseVersion,
//       onCreate: _onCreate,
//       onConfigure: _onConfigure,
    
//     );
//   }

//   Future<void> _onConfigure(Database db) async {
//     await db.execute('PRAGMA foreign_keys = ON');
//   }

//   Future<void> _onCreate(Database db, int version) async {
//     await db.execute('''
//       CREATE TABLE $_sessionTable (
//         ${_sessionColumns.join(',')}
//       )''');

//     await db.execute('''
//       CREATE TABLE $_heartRateTable (
//         ${_heartRateColumns.join(',')}
//       )''');

//     // 创建优化索引
//     await db.execute('''
//       CREATE INDEX idx_session_time ON $_sessionTable (startTime DESC)
//     ''');
//     await db.execute('''
//       CREATE INDEX idx_heart_rate ON $_heartRateTable (session_id, timestamp)
//     ''');
//   }

//   // Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
//   //   if (oldVersion < 2) {
//   //     // 移除可能存在的废弃字段
//   //     await db.execute('ALTER TABLE $_sessionTable DROP COLUMN IF EXISTS status');
//   //   }
//   // }

//   // 分页查询方法（保持原有实现）
//   Future<List<TestRecord>> getSessionsPaginated({
//     required int page,
//     required int pageSize,
//     DateTime? startDate,
//     DateTime? endDate,
//     List<String>? genders,
//     List<String>? activities,
//   }) async {
//     final db = await database;
    
//     // 构建动态查询条件
//     var query = 'SELECT * FROM sessions WHERE 1=1';
//     final args = <dynamic>[];

//     if (startDate != null && endDate != null) {
//       query += ' AND startTime BETWEEN ? AND ?';
//       args.add(startDate.millisecondsSinceEpoch);
//       args.add(endDate.millisecondsSinceEpoch);
//     }

//     if (genders != null && genders.isNotEmpty) {
//       query += ' AND gender IN (${List.filled(genders.length, '?').join(',')})';
//       args.addAll(genders);
//     }

//     if (activities != null && activities.isNotEmpty) {
//       query += ' AND activityType IN (${List.filled(activities.length, '?').join(',')})';
//       args.addAll(activities);
//     }

//     query += ' ORDER BY startTime DESC LIMIT ? OFFSET ?';
//     args.addAll([pageSize, page * pageSize]);

//     final results = await db.rawQuery(query, args);
//     return results.map((json) => TestRecord.fromJson(json)).toList();
//   }

//   // 修复后的带筛选异常统计方法
//   Future<int> getFilteredAbnormalCount({
//     DateTime? startDate,
//     DateTime? endDate,
//     List<String>? genders,
//     List<String>? activities,
//   }) async {
//     final db = await database;
//     final where = _buildWhereClause(
//       startDate: startDate,
//       endDate: endDate,
//       genders: genders,
//       activities: activities,
//     );

//     // 构建基础条件
//     final conditions = <String>["(avg_heartRate < 60 OR max_heartRate > 200)"];
    
//     // 添加筛选条件（移除WHERE前缀）
//     if (where.clause.isNotEmpty) {
//       conditions.add(where.clause.replaceFirst('WHERE ', ''));
//     }

//     final result = await db.rawQuery('''
//       SELECT COUNT(*) FROM $_sessionTable 
//       WHERE ${conditions.join(' AND ')}
//     ''', where.args);

//     return result.first['COUNT(*)'] as int;
//   }

//   // 带筛选的总记录数统计
//   Future<int> getFilteredSessionCount({
//     DateTime? startDate,
//     DateTime? endDate,
//     List<String>? genders,
//     List<String>? activities,
//   }) async {
//     final db = await database;
//     final where = _buildWhereClause(
//       startDate: startDate,
//       endDate: endDate,
//       genders: genders,
//       activities: activities,
//     );
    
//     final result = await db.rawQuery('''
//       SELECT COUNT(*) FROM $_sessionTable 
//       ${where.clause}
//     ''', where.args);

//     return result.first['COUNT(*)'] as int;
//   }

//   // 最后更新时间查询
//   Future<DateTime?> getFilteredLastSessionTime({
//     DateTime? startDate,
//     DateTime? endDate,
//     List<String>? genders,
//     List<String>? activities,
//   }) async {
//     final db = await database;
//     final where = _buildWhereClause(
//       startDate: startDate,
//       endDate: endDate,
//       genders: genders,
//       activities: activities,
//     );
    
//     final result = await db.rawQuery('''
//       SELECT MAX(startTime) FROM $_sessionTable 
//       ${where.clause}
//     ''', where.args);

//     final timestamp = result.first.values.first as int?;
//     return timestamp != null ? DateTime.fromMillisecondsSinceEpoch(timestamp) : null;
//   }

//   // WHERE子句构建方法
//   WhereClause _buildWhereClause({
//     DateTime? startDate,
//     DateTime? endDate,
//     List<String>? genders,
//     List<String>? activities,
//   }) {
//     final conditions = <String>[];
//     final args = <dynamic>[];

//     // 处理时间范围（精确到毫秒）
//     if (startDate != null && endDate != null) {
//       conditions.add('startTime BETWEEN ? AND ?');
//       args.addAll([
//         startDate.millisecondsSinceEpoch,
//         endDate.millisecondsSinceEpoch
//       ]);
//     }

//     // 处理性别筛选
//     if (genders != null && genders.isNotEmpty) {
//       final placeholders = List.filled(genders.length, '?').join(',');
//       conditions.add('gender IN ($placeholders)');
//       args.addAll(genders);
//     }

//     // 处理活动类型筛选
//     if (activities != null && activities.isNotEmpty) {
//       final placeholders = List.filled(activities.length, '?').join(',');
//       conditions.add('activityType IN ($placeholders)');
//       args.addAll(activities);
//     }

//     return WhereClause(
//       clause: conditions.isNotEmpty ? 'WHERE ${conditions.join(' AND ')}' : '',
//       args: args,
//     );
//   }

//   // 其他原有方法保持不变...
//   // Future<List<TestRecord>> getSessions() async { /* 原有实现 */ }
//   // Future<TestRecord> getSessionDetail(int sessionId) async { /* 原有实现 */ }1
//   // Future<int> deleteSession(int sessionId) async { /* 原有实现 */ }  1
//   // Future<List<HeartRateData>> getHeartRates(int sessionId) async { /* 原有实现 */ }1
//   // Future<DateTime?> getLastSessionTime() async { /* 原有实现 */ } 1
//  Future<TestRecord> getSessionDetail(int sessionId) async {
//        // print('🔍 查询会话ID: $sessionId 的心率数据');
//   if (sessionId == null) {
//     throw Exception('Session ID is null');
//   }

//   final db = await database;
//   final List<Map<String, dynamic>> sessionMap = await db.query(
//     'sessions',
//     where: 'id = ?',
//     whereArgs: [sessionId],
//   );
//    // print('📊 查询到心率数据量: ${sessionMap.first.values}');
//   if (sessionMap.isEmpty) {
//     throw Exception('Session not found');
//   }

//   final session = TestRecord.fromJson(sessionMap.first);

//   final List<Map<String, dynamic>> heartRateMaps = await db.query(
//     'heart_rates',
//     where: 'session_id = ?',
//     whereArgs: [sessionId],
//   );
 

//   final heartRates = heartRateMaps.map((map) => HeartRateData.fromJson(map)).toList();
//   session.heartRates = heartRates;
//   session.calculateStats();

//   return session;
// }
  
// // 删除会话
//   Future<int> deleteSession(int sessionId) async {
//     final db = await database;
//     return db.delete(
//       'sessions',
//       where: 'id = ?',
//       whereArgs: [sessionId],
//     );
//   }
//   Future<DateTime?> getLastSessionTime() async {
//   final db = await database;
//   final result = await db.rawQuery('''
//     SELECT MAX(startTime) FROM sessions
//   ''');
  
//   final timestamp = result.first.values.first as int?;
  
//   if (timestamp == null) return null;

//   // 将时间戳转换为UTC时间
//   final utcDateTime = DateTime.fromMillisecondsSinceEpoch(timestamp, isUtc: true);
  
//   // 转换为北京时间（UTC+8）
//   final beijingTime = utcDateTime.add(const Duration(hours: 8));
  
//   // 确保返回完整时间（精确到秒）
//   return DateTime(
//     beijingTime.year,
//     beijingTime.month,
//     beijingTime.day,
//     beijingTime.hour,
//     beijingTime.minute,
//     beijingTime.second,
//   );
// }
// Future<List<HeartRateData>> getHeartRates(int sessionId) async {
//   final db = await database;
//   final data = await db.query(
//     'heart_rates',
//     where: 'session_id = ?',
//     whereArgs: [sessionId],
//     orderBy: 'timestamp ASC',
//   );

//   return data.map((e) => HeartRateData(
//     timestamp: DateTime.fromMillisecondsSinceEpoch(e['timestamp'] as int),
//     value: e['value'] as int,
//   )).toList();
// }
// }

// class WhereClause {
//   final String clause;
//   final List<dynamic> args;

//   WhereClause({required this.clause, required this.args});
// }